package cdg; import graphutils.AbstractGraph; import java.util.Set; import cfg.nodes.CFGNode; public class CDG extends AbstractGraph<CFGNode, CDGEdge> { private DominatorTree<CFGNode> dominatorTree; private CDG() { } public DominatorTree<CFGNode> getDominatorTree() { return this.dominatorTree; } public static CDG newInstance(DominatorTree<CFGNode> dominatorTree) { CDG cdg = new CDG(); cdg.dominatorTree = dominatorTree; for (CFGNode vertex : dominatorTree.getVertices()) { Set<CFGNode> frontier = dominatorTree.dominanceFrontier(vertex); if (frontier != null) { cdg.addVertex(vertex); for (CFGNode f : frontier) { cdg.addVertex(f); cdg.addEdge(new CDGEdge(f, vertex)); } } } return cdg; } }